import os, string


from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph, SimpleDocTemplate, Table, TableStyle, Spacer
#from reportlab.test.utils import makeSuiteForClasses, outputfile :S
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm




def formato(canvas,doc):
    canvas.setFont("Helvetica",7)
    canvas.drawString(2.51*cm,28*cm,"ISI&Asociados")
    canvas.drawRightString(18.5*cm,28*cm,"Depto:Centro atencion a usuarios")
    U_legajo="@@@@@"
    canvas.drawString(14.8*cm,27.7*cm,"Usuario: "+U_legajo)
    canvas.line(2.51*cm,26*cm,18.5*cm,26*cm)
    canvas.line(2.51*cm,23.1*cm,18.5*cm,23.1*cm)
    canvas.drawCentredString(17*cm, 2*cm,'%d /' % canvas.getPageNumber())

def inf_PorTicket(c,story):
    styleSheet=getSampleStyleSheet()
    style_R=styleSheet['BodyText'] 
    style_R.leading=8
    story.append(Spacer(0,15))
    nroTicket= "@@@@@"
    story.append(Paragraph("TICKET - "+nroTicket,style_R))
    story.append(Spacer(0,7))
    estadoAct="@@@@"
    story.append(Paragraph("      Estado actual:"+estadoAct,style_R))
    clasifAct="@@@@@@"
    story.append(Paragraph("Clasificacion Actual: "+clasifAct,style_R))
    timeDias="@@@"
    timeHs="@@"
    timeMin="@@"
    story.append(Paragraph("Tiempo acumulado total de atencion: "+timeDias+" dias."+timeHs+" hs."+timeMin+" min.",style_R))
    story.append(Spacer(0,5))
    story.append(Paragraph("DATOS DEL USUARIO ",style_R))
    legajo="@@@@"
    nombyApll="@@@@@@@@"
    cargo="@@@@@@@@@"
    story.append(Paragraph("---------------"+legajo+" - "+nombyApll+" - "+cargo,style_R))
    tel="@@@@@@@"
    telInt="@@@@"
    story.append(Paragraph("Telefono: "+tel+"  interno: "+telInt,style_R))
    dir="@@@@@@@@@@@@@"
    piso="@@"
    ofc="@@"
    story.append(Paragraph("Direccion: "+dir+"       piso: "+piso+"    oficina:"+ofc,style_R))
    story.append(Spacer(0,8))    
    story.append(Paragraph("-------------------------------------------------------------------------------------------------------------------------------------",style_R))
    story.append(Paragraph("HISTORIAL CRONOLOGICO DEL TICKET:",style_R))
    story.append(Spacer(0,8))

 #mostrar los grupos de resolucion con una estruc. de control
    grupo="@@@@@@@@@@@@@@@@@@@@@"
    fecha="@@@@@@@@@"
    treal="@@@@@@@"
    ttotal="@@@@@@@"
    
    encab_fecha= Paragraph('''Fecha de asignacion''',style_R)
    encab_treal= Paragraph('''T.real  atencion (dia-hs:min)''',style_R)
    encab_ttotal= Paragraph('''T.total  asignado (dia-hs:min)''',style_R)
    historial=Table([['Grupo de resolucion',encab_fecha,encab_treal,encab_ttotal],[grupo,fecha,treal,ttotal],
    [grupo,fecha,treal,ttotal]])
    story.append(historial)

    story.append(Spacer(0,10))  
    story.append(Paragraph("RE-CLASIFICACIONES:",style_R)) 
    fecha="@@@@@@@"
    grupor="@@@@@@@@@@@@@@@@@@@@@@@@"
    reclasificaciones=Table([['Fecha','Grupo de resolucion'],[fecha,grupor],
    [fecha,grupor]])
    story.append(reclasificaciones)
    story.append(Paragraph("FIN TICKET No:"+nroTicket,style_R))

#    t=c.beginText(2*cm,20*cm)
#    t.setFont('Times-Roman',10)
#    t.textLines("""
#TIcKET - @@@@@@
#	Estado actual: @@@@@
#	Clasificacion Actual: @@@@@@@@@@@@@@@@@@@@
#	Tiempo acumulado total de atencion: @@@dias. @@@ hs. @@ min.
#DATOS DEL USUARIO
#
#	@@@ - @@@@@@@@@@@@@@@@@ - @@@@@@@@@@@@@@
#
#	Telefono: @@@@@@@@@@@@@				interno @@@@
#	Direccion: @@@@@@@@@@@				piso: @@@@  oficina: @@@""")
#
#    c.drawText(t)
#    c.showPage()


def inf_PorLegajo(c,story):
    styleSheet=getSampleStyleSheet()
    style_R=styleSheet['BodyText'] 
    style_R.leading=10
    story.append(Spacer(0,15))

    #usar estructura de control para mostrar todos los estados

    story.append(Paragraph("DATOS DEL USUARIO ",style_R))
    story.append(Spacer(0,4))
    legajo="@@@@"
    nombyApll="@@@@@@@@"
    cargo="@@@@@@@@@"
    story.append(Paragraph("----"+legajo+" - "+nombyApll+" - "+cargo,style_R))
    tel="@@@@@@@"
    telInt="@@@@"
    story.append(Paragraph("Telefono: "+tel+"       interno: "+telInt,style_R))
    dir="@@@@@@@@@@@@@"
    piso="@@"
    ofc="@@"
    story.append(Paragraph("Direccion: "+dir+"       piso: "+piso+"    oficina:"+ofc,style_R))
    story.append(Spacer(0,4))    
    cant_ticket="@@"
    story.append(Paragraph("Cantidad de ticket asig:"+cant_ticket,style_R))
    story.append(Paragraph("-------------------------------------------------------------------------------------------------------------------------------------",style_R)) 
    #usar estructura de control para mostrar todos los ticket de cada legajo

    nroTicket= "@@@@@"
    story.append(Paragraph("TICKET - "+nroTicket,style_R))
    story.append(Spacer(0,4))
    fechaApert="@@@@@@@@"
    story.append(Paragraph("Fecha apertura:"+fechaApert,style_R))
    clasifAct="@@@@@@"
    story.append(Paragraph("Clasificacion Actual: "+clasifAct,style_R))    
    fecha_ultcambio="@@@@@@"
    story.append(Paragraph("Fecha del ultimo cambio de estado: "+fecha_ultcambio,style_R))
    estadoAct="@@@@"
    story.append(Paragraph("Estado actual: "+estadoAct,style_R)) 
    grupoRes="@@@@@@@@@@@@@"
    story.append(Paragraph("Grupo de resolucion actual: "+grupoRes,style_R))
    story.append(Spacer(0,8))    
    ult_obser="@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
    story.append(Paragraph("Ultima observacion:",style_R))
    story.append(Paragraph(ult_obser,style_R))
    story.append(Spacer(0,10))
    story.append(Paragraph("FIN TICKET No:"+nroTicket,style_R))
    story.append(Paragraph("-------------------------------------------------------------------------------------------------------------------------------------",style_R))    


def inf_PorEstado(c,story):
    styleSheet=getSampleStyleSheet()
    style_R=styleSheet['BodyText'] 
    style_R.leading=10
    story.append(Spacer(0,15))

    #usar estructura de control para mostrar todos los estados
 
    estado="@@@@@@@@"
    descrip="@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
    cant_ticket="@@"
    story.append(Paragraph("ESTADO - "+estado,style_R))
    story.append(Paragraph("Descripcion: ",style_R))
    story.append(Paragraph(descrip,style_R))
    story.append(Paragraph("Total ticket: "+cant_ticket,style_R))
    story.append(Paragraph("-------------------------------------------------------------------------------------------------------------------------------------",style_R))
    story.append(Spacer(0,5))

    #usar estructura de control para mostrar todos los ticket del estado

    nroTicket= "@@@@@"
    story.append(Paragraph("TICKET - "+nroTicket,style_R))
    story.append(Spacer(0,4))
    fechaApert="@@@@@@@@"
    story.append(Paragraph("Fecha apertura:"+fechaApert,style_R))
    clasifAct="@@@@@@"
    story.append(Paragraph("Clasificacion Actual: "+clasifAct,style_R))
    timeDias="@@@"
    timeHs="@@"
    timeMin="@@"
    story.append(Paragraph("Tiempo acumulado total de atencion: "+timeDias+" dias."+timeHs+" hs."+timeMin+" min.",style_R))
    legajo="@@@@"
    story.append(Paragraph("Legajo solicitante:"+legajo,style_R))
    grupoRes="@@@@@@@@@@@@@"
    story.append(Paragraph("Grupo de resolucion actual: "+grupoRes,style_R))
    story.append(Spacer(0,5))    
    ult_obser="@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
    story.append(Paragraph("Ulitma observacion:",style_R))
    story.append(Paragraph(ult_obser,style_R))
    story.append(Spacer(0,8))
    story.append(Paragraph("FIN ticket nro:"+nroTicket,style_R))
    story.append(Paragraph("-------------------------------------------------------------------------------------------------------------------------------------",style_R))

def inf_PorGrupo(c,story):
    styleSheet=getSampleStyleSheet()
    style_R=styleSheet['BodyText'] 
    style_R.leading=8
  
    #usar estructura de control para mostrar todos grupos de resolucion

    story.append(Spacer(0,10))
    grupo="@@@@@@@@@@@@@@@@@"
    story.append(Spacer(0,10))
    story.append(Paragraph("GRUPO DE RESOLUCION: "+grupo,style_R))	
    story.append(Spacer(0,20))
    story.append(Paragraph("-------------------------------------------------------------------------------------------------------------------------------------",style_R))


    #GRAFICO DE TORTA  
     


    #usar estructura de control para mostrar todos los ticket del grupo

    nroTicket= "@@@@@"
    story.append(Paragraph("TICKET - "+nroTicket,style_R))
    story.append(Spacer(0,5))
    fechaApert="@@@@@@@@"
    story.append(Paragraph("Fecha apertura:"+fechaApert,style_R))
    story.append(Spacer(0,4))
    clasifAct="@@@@@@"
    story.append(Paragraph("Clasificacion Actual: "+clasifAct,style_R))
    fecha_ultcambio="@@@@@@"
    story.append(Paragraph("Fecha del ultimo cambio de estado: "+fecha_ultcambio,style_R))
    estadoAct="@@@@"
    story.append(Paragraph("Estado actual:"+estadoAct,style_R)) 
    estadoGrupo="@@@@@@@@@@"
    story.append(Paragraph("Estado de la intervencion del grupo: ",style_R))
    story.append(Spacer(0,8))
    timeDias="@@@"
    timeHs="@@"
    timeMin="@@"
    story.append(Paragraph("Tiempo real de atencion: "+timeDias+" dias."+timeHs+" hs."+timeMin+" min.",style_R))
    timeDias="@@@"
    timeHs="@@"
    timeMin="@@"
    story.append(Paragraph("Tiempo total asignado: "+timeDias+" dias."+timeHs+" hs."+timeMin+" min.",style_R))
    story.append(Spacer(0,8))
    observ="@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\
    @@@@@@@@@@@@@@@@@@"
    story.append(Paragraph("Observaciones del grupo: ",style_R))
    story.append(Paragraph(observ,style_R))
    story.append(Paragraph("FIN ticket nro:"+nroTicket,style_R))
    story.append(Paragraph("-------------------------------------------------------------------------------------------------------------------------------------",style_R))

def inf_PorClasificacion(c,story):
    styleSheet=getSampleStyleSheet()
    style_R=styleSheet['BodyText'] 
    style_R.leading=9
    story.append(Spacer(0,15))
    
    #usar estructura de control para mostrar todos grupos de resolucion

    clasif="@@@@@@@@@@@@@@"
    story.append(Paragraph("CLASIFICACION: "+clasif,style_R))
    story.append(Paragraph("-------------------------------------------------------------------------------------------------------------------------------------",style_R))
    #story.append(Spacer(0,4))
     
    
    #usar estructura de control para mostrar todos los ticket de la clasificacion

    nroTicket= "@@@@@"
    story.append(Paragraph("TICKET - "+nroTicket,style_R))
    story.append(Spacer(0,2))
    fecha_apert="@@@@@@"
    story.append(Paragraph("Fecha apertura: "+fecha_apert,style_R))
    story.append(Spacer(0,2))
    legajo="@@@@"
    story.append(Paragraph("Legajo solicitante: "+legajo,style_R))
    estadoAct="@@@@"
    story.append(Paragraph("Estado actual:"+estadoAct,style_R))
    ult_grupo="@@@@@@"
    story.append(Paragraph("Ultimo grupo de resolucion: "+ult_grupo,style_R))
    story.append(Spacer(0,2))
    story.append(Paragraph("FIN TICKET No:"+nroTicket,style_R))
    story.append(Spacer(0,-1))
    story.append(Paragraph("-------------------------------------------------------------------------------------------------------------------------------------",style_R))


def crearReporte(nombre_archivo,informe, pageCallBack=None):
    global listaTitulo, cerrado
    liataTitulo=[]
    cerrado=0

    c = canvas.Canvas(nombre_archivo)
    c.showOutline()
  
    styleSheet=getSampleStyleSheet()
    story=[]

	#agrega el titulo
    style_T=styleSheet['BodyText']
    style_T.alignment=1
    Titulo=Paragraph("***REPORTE DE TICKETS***",style_T)
    story.append(Titulo)
 
	#agrega tipo de agrupacion
    style_A=styleSheet['BodyText']
    #style_A.alignment=0
    forma="@@@@@@@@@"
    Agrupacion=Paragraph("Agrupados por:@@@@@@@@@@@      en forma: "+forma, style_A)
    story.append(Agrupacion)

	#agrega los filtros
    style_F=styleSheet['BodyText']
    style_F.firstLineIndent=0
    style_F.leading=7
    #style_F.alignment=0
    TextoFiltro="	Filtros usados:"
    Filtros=Paragraph(TextoFiltro, style_F)
    story.append(Filtros)
    Filtro1="@@@@@@@"
    story.append(Paragraph(Filtro1,style_F))
    Filtro2="@@@@@@@"
    story.append(Paragraph(Filtro2,style_F))
    Filtro3="@@@@@@@"
    story.append(Paragraph(Filtro3,style_F))
    Filtro4="@@@@@@@"
    story.append(Paragraph(Filtro4,style_F))
    Filtro5="@@@@@@@"
    story.append(Paragraph(Filtro5,style_F))
   
    if informe == 20:
        inf_PorTicket(c,story)
    elif informe ==21:
        inf_PorLegajo(c,story)
    elif informe ==22:
        inf_PorEstado(c,story)
    elif informe ==23:
        inf_PorGrupo(c,story)
    elif informe ==24:
        inf_PorClasificacion(c,story)
 	
    doc=SimpleDocTemplate(nombre_archivo, pagesize=A4, showBoundary=1)
    doc.build(story,formato)
    return c


def run(nombre_Archivo,informe):
    p=crearReporte(nombre_Archivo,informe)
    p.setAuthor('ghhp')
    p.setTitle('Reportes ISI&ASOCIADOS_')
    p.save()
    p=crearReporte(nombre_Archivo,informe)
    import os
    f=os.path.splitext(nombre_Archivo)
    f=open('%sm%s' % (f[0],f[1]),'wb')
    f.write(p.getpdfdata())
    f.close()

if __name__ == '__main__':

    #informeCDU tiene el valor que determina que informe se imprime

    informeCDU=24
    if informeCDU == 20:
       run("reporteCDU20_ticket.pdf",informeCDU)
    elif informeCDU == 21:
       run("reporteCDU21_legajo.pdf",informeCDU)
    elif informeCDU == 22:
       run("reporteCDU22_estado.pdf",informeCDU)
    elif informeCDU == 23:
       run("reporteCDU23_grupo.pdf",informeCDU)
    elif informeCDU == 24:
       run("reporteCDU24_clasif.pdf",informeCDU)

